1. Field of the Invention
The present invention relates to data storage and more particularly to systems and methods for achieving data consistency among multiple copies.
2. Description of the Related Art
Many computer applications create multiple copies of the same data. Maintaining consistency of these multiple copies is important. The method employed, for updating the multiple copies of a piece of data, determines the level of consistency among the copies, such as strong or weak consistency, the resource consumption in various components of the system, such as network bandwidth and CPU cycles, and the performance implications as observed by end users, such as service delays.
One problem of keeping multiple caches strongly consistent with each other appears in processor caches for multiprocessors and file caches for distributed file systems. For processor caches, response times must be extremely fast (orders of magnitude faster than those for Web caches); to achieve those speeds, the caches have extremely short and fast links of guaranteed reliability to a memory controller that permits them to be informed simultaneously of updates.
Techniques that work well given these facilities are simply not practical for distributed applications such as Web caches. For example, in the Sprite distributed operating system (Ousterhout, J. K., Cherenson, A. R., Douglis, F., Nelson, M. N, and Welch, B. B., “The Sprite network operating system”, Computer 21(2), pp. 23-36, February 1988), the system enforces strong consistency for shared files. Namely, when one of the nodes opens a file for write, all of the cached copies of the file are invalidated, and all read and write operations on the file go to the server storing the file. This method is characterized by high access latencies for objects with high likelihood of concurrent read and write accesses.
A typical method for enforcing strong consistency is postponing the publication of a new object version until all nodes receive, enact, and acknowledge an invalidation request or they are declared failed. Therefore, requests that are received by a node after it has invalidated the cached object have to wait until the system decides that the new version can be published. Thus, response times of user requests can be unpredictably affected by failures of nodes in the system never involved in serving the particular requests.
In the area of distributed databases, the ZEMBU™ Distributed Application Platform takes a similar approach as it provides transactional control over how, what, and when updates are made available from a single, centralized production system to remote servers.
Therefore, a need exists for a strong consistency scheme, which ensures that read requests at well-functioning nodes are not delayed due to node failures in the system.